const app = getApp();

Page({
  /**
   * 页面初始数据
   */
  data: {
    userInfo: {},    // 用户信息（头像、昵称）
    isLogin: false,  // 是否已登录
    hasPhone: false, // 是否已绑定手机号
    tips: '',        // 提示信息
    code: '',        // 微信登录code（临时凭证）
    sessionKey: '',  // 后端返回的sessionKey（用于解密手机号）
    isLoading: false // 加载状态标记
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad() {
    console.log('登录页面加载，开始获取微信登录凭证');
    this.getWechatCode();
  },

  /**
   * 1. 获取微信登录code（临时凭证，5分钟有效）
   */
  getWechatCode() {
    wx.login({
      success: (res) => {
        console.log('wx.login接口返回:', res);
        if (res.code) {
          this.setData({ code: res.code });
          console.log('成功获取微信code:', res.code);
        } else {
          this.setData({ 
            tips: '获取登录凭证失败：' + res.errMsg,
            isLoading: false
          });
          console.error('获取微信code失败:', res.errMsg);
        }
      },
      fail: (err) => {
        this.setData({ 
          tips: '登录接口调用失败：' + err.errMsg,
          isLoading: false
        });
        console.error('wx.login调用失败:', err);
      }
    });
  },

  /**
   * 2. 获取用户信息（头像、昵称，需用户授权）
   */
  getUserInfo(e) {
    console.log('用户信息授权事件:', e);
    const userInfo = e.detail.userInfo;
    
    // 显示加载状态
    this.setData({ isLoading: true });
    
    if (userInfo) {
      // 存储用户基础信息
      this.setData({ userInfo, tips: '正在登录...' });
      console.log('用户同意授权，用户信息:', userInfo);

      // 重新获取code（确保code有效性）
      wx.login({
        success: (res) => {
          console.log('重新获取wx.login结果:', res);
          if (res.code) {
            this.callBackendLogin(userInfo, res.code);
          } else {
            this.setData({ 
              isLoading: false,
              tips: '获取登录凭证失败：' + res.errMsg 
            });
            console.error('重新获取code失败:', res.errMsg);
          }
        },
        fail: (err) => {
          this.setData({
            isLoading: false,
            tips: '登录失败：' + err.errMsg
          });
          console.error('重新调用wx.login失败:', err);
        }
      });
    } else {
      // 用户拒绝授权
      this.setData({ 
        isLoading: false,
        tips: '您拒绝了用户信息授权，无法登录' 
      });
      console.log('用户拒绝授权用户信息');
    }
  },

  /**
   * 3. 调用后端登录接口（核心修复：数据层级匹配）
   */
  callBackendLogin(userInfo, newCode) {
    console.log('开始调用后端登录接口，code:', newCode);
    
    wx.request({
      url: app.globalData.baseUrl + '/api/auth/wechat/login',
      method: 'POST',
      header: {
        'Content-Type': 'application/json'
      },
      data: {
        code: newCode,
        avatarUrl: userInfo.avatarUrl,
        nickName: userInfo.nickName
      },
      success: (res) => {
        console.log('后端登录接口返回完整数据:', res);
        const resp = res.data;

        // 无论成功失败，先关闭loading
        this.setData({ isLoading: false });

        // 验证后端返回状态
        if (resp.code === 200 && resp.data) {
          // 修复：直接从resp.data获取数据（匹配后端返回结构）
          const token = resp.data.token;
          const user = resp.data.user;
          
          // 验证token和user有效性
          if (!token || !user) {
            this.setData({ tips: '登录失败：未获取到有效信息' });
            console.error('后端返回数据异常：token=' + token + ', user=' + user);
            return;
          }

          // 保存登录状态到本地缓存
          wx.setStorageSync('token', token);
          wx.setStorageSync('userInfo', user);
          console.log('登录状态保存成功，token长度:', token.length);

          // 更新页面状态
          this.setData({
            isLogin: true,
            hasPhone: !!user.phoneMasked,
            sessionKey: user.sessionKey || '',
            tips: '登录成功，正在跳转...'
          });

          // 跳转到首页（使用reLaunch确保关闭登录页）
          wx.reLaunch({ 
            url: '/pages/index/index',
            success: () => {
              console.log('跳转首页成功');
            },
            fail: (err) => {
              console.error('跳转首页失败:', err);
              this.setData({ tips: '登录成功，跳转失败：' + err.errMsg });
            }
          });
        } else {
          this.setData({ tips: '登录失败：' + (resp.msg || '后端处理失败') });
          console.error('后端登录失败：code=' + resp.code + ', msg=' + resp.msg);
        }
      },
      fail: (err) => {
        this.setData({ 
          isLoading: false,
          tips: '接口调用失败：' + err.errMsg 
        });
        console.error('登录接口调用失败:', err);
      },
      complete: () => {
        console.log('登录请求处理完成');
      }
    });
  }
});
